60d752ea7139eb3beaa51984a28c55d26bf59f50,src/main/java/org/datanucleus/metadata/AbstractMemberMetaData.java,AbstractMemberMetaData,initialise,#ClassLoaderResolver#,890
Before Change
mapmd.key.embedded = Boolean.TRUE;
}
}
if (mapmd.value.classMetaData != null && mapmd.value.classMetaData.isEmbeddedOnly())
{
// Value is persistent yet embedded only so mark as embedded in metadata
if (valueMetaData == null)
{
valueMetaData = new ValueMetaData();
valueMetaData.parent = this;
valueMetaData.populate(clr, null);
}
if (valueMetaData.getEmbeddedMetaData() == null)
{
EmbeddedMetaData valueEmbmd = new EmbeddedMetaData();
valueEmbmd.parent = valueMetaData;
valueEmbmd.populate(clr, null, mmgr);
valueMetaData.setEmbeddedMetaData(valueEmbmd);
mapmd.value.embedded = Boolean.TRUE;
}
}
After Change
* This should be called AFTER using the populate method if you are going to use populate.
* It creates the internal convenience arrays etc needed for normal operation.
*/
public synchronized void initialise(ClassLoaderResolver clr)
{
if (persistenceModifier == FieldPersistenceModifier.NONE)
{
setInitialised();
return;
}
// MetaDataManager mmgr = getMetaDataManager();
// Cater for user specifying column name, or columns
if (columns.isEmpty() && column != null)
{
columnMetaData = new ColumnMetaData[1];
columnMetaData[0] = new ColumnMetaData();
columnMetaData[0].setName(column);
columnMetaData[0].parent = this;
columnMetaData[0].initialise(clr);
}
else if (columns.size() == 1 && column != null)
{
// Cater for user specifying <column> and <field column="...">
columnMetaData = new ColumnMetaData[1];
columnMetaData[0] = columns.get(0);
if (columnMetaData[0].getName() == null)
{
columnMetaData[0].setName(column);
}
columnMetaData[0].initialise(clr);
}
else
{
columnMetaData = new ColumnMetaData[columns.size()];
for (int i=0; i<columnMetaData.length; i++)
{
columnMetaData[i] = columns.get(i);
columnMetaData[i].initialise(clr);
}
}
// Initialise all sub-objects
if (containerMetaData != null)
{
containerMetaData.initialise(clr);
if (containerMetaData instanceof CollectionMetaData)
{
CollectionMetaData collmd = (CollectionMetaData)containerMetaData;
if (collmd.element.classMetaData != null)
{
if (collmd.element.classMetaData.isEmbeddedOnly())
{
// Element is persistent yet embedded only so mark as embedded in metadata
if (elementMetaData == null)
{
elementMetaData = new ElementMetaData();
elementMetaData.parent = this;
elementMetaData.populate(clr, null);
}
collmd.setEmbeddedElement(true);
}
if (embedded == Boolean.TRUE)
{
// User has set field as embedded, so assume they mean the element
collmd.setEmbeddedElement(true);
this.embedded = null;
this.embeddedMetaData = null;
}
}
}
else if (containerMetaData instanceof ArrayMetaData)
{
ArrayMetaData arrmd = (ArrayMetaData)containerMetaData;
if (arrmd.element.classMetaData != null)
{
if (arrmd.element.classMetaData.isEmbeddedOnly())
{
// Element is persistent yet embedded only so mark as embedded in metadata
if (elementMetaData == null)
{
elementMetaData = new ElementMetaData();
elementMetaData.parent = this;
elementMetaData.populate(clr, null);
}
arrmd.setEmbeddedElement(true);
}
if (embedded == Boolean.TRUE)
{
// User has set field as embedded, so assume they mean the element
arrmd.setEmbeddedElement(true);
this.embedded = null;
this.embeddedMetaData = null;
}
}
}
else if (containerMetaData instanceof MapMetaData)
{
MapMetaData mapmd = (MapMetaData)containerMetaData;
if (mapmd.key.classMetaData != null)
{
if (mapmd.key.classMetaData.isEmbeddedOnly())
{
// Key is persistent yet embedded only so mark as embedded in metadata
if (keyMetaData == null)
{
keyMetaData = new KeyMetaData();
keyMetaData.parent = this;
keyMetaData.populate(clr, null);
}
mapmd.setEmbeddedKey(true);
}
}
if (mapmd.value.classMetaData != null)
{
if (mapmd.value.classMetaData.isEmbeddedOnly())
{
// Value is persistent yet embedded only so mark as embedded in metadata
if (valueMetaData == null)